package com.quanyan.user.serviceFacade;

import com.quanyan.api.APIResponse;
import com.quanyan.common.vo.resp.RespCity;
import com.quanyan.user.request.*;
import com.quanyan.user.response.RespOpenUserInterest;
import com.quanyan.user.response.RespUserInfoBase;
import com.quanyan.user.response.RespUserInfoDetail;

import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2016/6/12.
 */
public interface UserServiceFacade {

    /**
     * 查询用户信息
     * @param userId
     * @return
     */
    @NotNull
    APIResponse<RespUserInfoBase> queryUserInfo(Integer userId);

    /**
     * 查询用户信息
     * @param userId
     * @return
     */
    @NotNull
    APIResponse<RespUserInfoDetail> queryUserInfoDetail(Integer userId);

    /**
     * 查询用户信息
     * @param mobile
     */
    @NotNull
    APIResponse<RespUserInfoBase> queryUserInfoByPhone(String mobile);


    /**
     * 查询用户信息
     * @param wxOpenId 微信
     * @return
     */
    @NotNull
    APIResponse<RespUserInfoBase> queryUserInfoByWxOpenId(String wxOpenId);


    /**
     * 查询用户信息
     * @param token
     * @return
     */
    @NotNull
    APIResponse<RespUserInfoBase> queryUserInfoByToken(String token);


    /**
     * 修改用户基础信息
     * @param reqUserParam
     * @return
     */
    @NotNull
    APIResponse updateUserInfo(ReqUserParam reqUserParam);


    /**
     * 批量查询用户信息
     * @param lstUserId
     * @return
     */
    @NotNull
    APIResponse<List<RespUserInfoBase>> batchQueryUserInfo(List<Integer> lstUserId);

    /**
     * 批量查询用户详细信息
     * @param lstUserId
     * @return
     */
    @NotNull
    APIResponse<List<RespUserInfoDetail>> batchQueryUserInfoDetail(List<Integer> lstUserId);


    /**
     * 登录
     * @param reqAppUserLogin
     * @return
     */
    APIResponse<RespUserInfoBase> appLogin(ReqAppUserLogin reqAppUserLogin);


    /**
     * true已绑定 false未绑定
     * @param uid
     * @return
     */
    Boolean isBindingMobile(Integer uid);



    /**
     * 根据token(c++)获取用户ID
     * @param token
     * @return
     */
    Integer getUserIdByToken(String token);


    /**
     * 批量查询用户信息
     * @param lstUserId
     * @return
     */
    Map<Integer,RespUserInfoBase> batchQueryUserInfoToMap(List<Integer> lstUserId);

    /**
     * 获取用户二维码
     * @param uid
     * @return
     */
    String getUserQRCode(Integer uid);


    /**
     * 后台注册会员
     * @param reqBackstageUser
     * @return
     */
    APIResponse registerMemberUser(ReqBackstageUser reqBackstageUser);


    /**
     *批量注册后台用户
     * @param reqBackstageUsers
     * @return
     */
    APIResponse<Map<String,Integer>> batchRegisterMemberUser(List<ReqBackstageUser> reqBackstageUsers);

    /**
     * 批量查询用户兴趣列表
     * @param uids
     * @return
     */
    Map<Integer,List<RespOpenUserInterest>> batchQueryUserInterest(List<Integer> uids);

    /**
     * 用户查看好友信息
     * @param uid //登录id
     * @param friendUid // 好友id
     * @return
     */
    APIResponse<RespUserInfoBase> queryUserInfo(Integer uid ,Integer friendUid);


    /**
     * 查看好友详细信息
     * @param uid //登录id
     * @param friendUid // 好友id
     * @return
     */
    APIResponse<RespUserInfoDetail> queryUserInfoDetail(Integer uid ,Integer friendUid);

    /**
     * 用户查看好友列表信息
     * @param uid
     * @param lstUserId //好友uid
     * @return
     */
    APIResponse<List<RespUserInfoBase>> batchQueryUserInfo(Integer uid , List<Integer> lstUserId);


    /**
     * 批量查询用户详细信息
     * @param lstUserId //好友uid
     * @param uid
     * @return
     */
    APIResponse<List<RespUserInfoDetail>> batchQueryUserInfoDetail(Integer uid,List<Integer> lstUserId);

    /**
     * 更换用户手机号
     * @param reqChangePhone
     * @return
     */
    APIResponse changePhone(ReqChangePhone reqChangePhone);

    /**
     * 获取城市信息
     * @param id 城市Id
     * @return
     */
    APIResponse<RespCity> getCity(Integer id);

    /**
     * 用户内部注册
     * @param reqInsideUserRegister 内部注册参数
     * @return RespUserInfoBase 用户基本信息
     */
    APIResponse<RespUserInfoBase> userInsideRegister(ReqInsideUserRegister reqInsideUserRegister);

}
